package com.xtm.exercise.base;

import org.junit.Test;

import java.sql.Timestamp;
import java.util.ArrayList;

/*
    自动装箱与自动拆箱:基本类型的数据和包装类之间可以自动的相互转换
    自动装箱: 自动将基本数据类型转换为包装类型 (基本类型的数据->包装类)
        构造方法:
            Integer(int value) 构造一个新分配的 Integer 对象，它表示指定的 int 值。
            Integer(String s) 构造一个新分配的 Integer 对象，它表示 String 参数所指示的 int 值。
                传递的字符串,必须是基本类型的字符串,否则会抛出异常 "100" 正确  "a" 抛异常
        静态方法:
            static Integer valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例。
            static Integer valueOf(String s) 返回保存指定的 String 的值的 Integer 对象。
        例如：
            Integer i = new Integer(4);//使用构造函数函数
            Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法

    自动拆箱: 自动将包装类型转换为基本数据类型 (包装类->基本类型的数据)
        成员方法:
            int intValue() 以 int 类型返回该 Integer 的值。
    在定义变量的时候，比如`Integer num = 1;`就会自动装箱成Integer对象操作，`int num2 = num;`就会进行自动拆箱操作
 */
public class Demo01Interger {
    public static void main(String[] args) {
        //装箱:把基本类型的数据,包装到包装类中(基本类型的数据->包装类)
        //静态方法
        Integer in3 = Integer.valueOf(1); // 缓存 -127 ~ 128
        System.out.println(in3);
        //Integer in4 = Integer.valueOf("a");//NumberFormatException数字格式化异常
        Integer in4 = Integer.valueOf("1");
        System.out.println(in4);

        //拆箱:在包装类中取出基本类型的数据(包装类->基本类型的数据)
        int i = in4.intValue();
        System.out.println(i);

        // int 转 String
        String s3 = String.valueOf(100);
        String s4 = "" + 100;

        // String 转 int基本类型
        int i1 = Integer.parseInt(s3);
        Integer integer = Integer.valueOf(s3);
    }

    private static final ArrayList<Integer> INCLUDE_NODE_THROUGH_ELECTRONIC_FENCE = new ArrayList<Integer>() {{
        add(1);
        add(2);
    }};

    @Test
    public void test01(){
        Integer a = 200;
        Integer b = 200;
//        Integer b = 200;
//        System.out.println(a=b);
        System.out.println(a==b); // false
        // TODO 开发常用 Integer比较 用 equals , 因为有缓存 -127 ~ 128
        System.out.println(a.equals(b));  // true

        int result = a.compareTo(b); // 调用compareTo()方法比较a和b的大小，返回-1、0或1
        System.out.println(result);

        Integer d = null;
        boolean equals = a.equals(d);
        System.out.println(equals);

        boolean contains = INCLUDE_NODE_THROUGH_ELECTRONIC_FENCE.contains(null);
        System.out.println("contains=" +contains);

    }

    @Test
    public void StrToTimestrap(){
        String time = "2020-01-02 00:00:00";
        //字符串转化时间戳
        Timestamp timestamp = Timestamp.valueOf(time);
        System.out.println(timestamp);
        System.out.println(timestamp.getTime());
    }

}
